home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok44.lha
/
Analyse3.01
/
analyse.dok
< prev
next >
Wrap
Text File
|
1993-08-15
|
16KB
|
326 lines
____________________________________________________________________
| |
| *** **** * * * * * * ****** * * ******* |
| * ** * * * * * * ** ** * ** * * |
| * * * * * * * * * * * * * * * * * |
| * * * * *** * * * * * **** * * * * |
| * * * * * * * * * * * * * * * |
| * ** * * * * * * * * * * ** * |
| *** **** * * ***** * * ****** * * * |
|____________________________________________________________________|
zum Modul 'analyse' (C) by Lothar Schwab
========================================
( Genauer: Die Beschreibung der aktuellen Version V3.01 )
Inahltsverzeichniss:
--------------------
Kapitel Inhalt
1.......................Vorwort zu dieser Dokumentation
2.......................Was ist Analyse?
3.......................Umfang des Analysepaketes
4.......................Bedienung von Analyse
4.1.....................Das Funktionsangebot von Analyse
4.2.....................Das Datenangebot von Analyse
5.......................schematische Darstellung von Analyse
1. Vorwort zu dieser Dokumentation
----------------------------------
Diese Dokumentation versteht sich nicht als Beschreibung von Analyse, son-
dern vielmehr als eine Beschreibung der Anwendung von Analyse. Zu den
früheren Versionen von Analyse gibt es ebenfalls Dokumentationsfiles.
Teilweise wurden diese jedoch nicht mit jeder Version neu erstellt sondern
es wurden zu den alten Dokumentationsfiles die neuen Informationen dazuge-
schrieben. Die dadurch entstandene Unklarheit und Verwirrung soll nun mit
Version V3.01 beseitigt werden. Diese Dokumentation wurde neu erstellt.
Nur Kleinigkeiten wurden von der alten Dokumentation übernommen. Dem An-
wender wird empfohlen, alle Dateien zu löschen, die zu alten Versionen von
Analyse gehören.
2. Was ist Analyse?
-------------------
Analyse ist ein Softwarepaket, daß den Umgang mit arithmetischen Aus-
drücken unterstützt. Ein Anwendungsprogramm kann Analyse einen als Text-
string vorliegenden arithmetischen Ausdruck in ausführbaren Maschinencode
übersetzen lassen. Über Analyse läßt sich der Maschinencode starten, da-
mit er den Wert des arithmetischen Ausdruckes berechnet und das Ergebniss
dem Anwendungsprogramm zur Verfügung stellt. Analyse gestattet es, den
arithmetischen Ausdruck von Variablen abhängig zu machen. Wird der Ma-
schinencode mehrmals mit verschiedenen Variablenbelegungen aufgerufen,
dann kann man z.B. Funktionswerte berechnen und graphisch darstellen. (
Man muß dazu nur den arithmetischen Ausdruck als Funktionsvorschrift
interpretieren. ) Darüberhinaus bietet Analyse die Möglichkeit, mit
mehreren arithmetischen Ausdrücken auf einmal zu arbeiten. Außerdem ist
es möglich, einen arithmetischen Ausdruck ( als Funktion aufgefasst ) nach
einer Variablen symbolisch abzuleiten. Damit lassen sich schon recht
leistungsfähige Programme entwerfen, die auch zur Laufzeit anwenderdefi-
nierte Funktionen verarbeiten können. Durch geeignete Interpretation der
Variablen lassen sich sogar Differentialgleichungen ( numerisch ) ver-
arbeiten. Analyse ist entwickelt worden für den Commodore Amiga in der
Programmiersprache Modula-2.
3. Umfang des Analysepaketes
----------------------------
Zum kompletten Analysepaket gehören folgende Dateien:
-analyse.dok
analyse.dok ist nichts weiter, als diese Dokumentationsdatei
-syntax
Die Datei Syntax ist eine graphische Beschreibung der Syntax, die Ana-
lyse für arithmetische Ausdrücke zuläßt. Die Syntax ist in Form von
Backus Naur Diagrammen dargestellt. Diese Darstellung ist sehr an-
schaulich und soll dem Anwender dazu dienen, sich bei offenen Fragen
über die Syntax Klarheit zu verschaffen.
-analyse.def
Analyse ist ein Modul, daß jedes andere Modula-2 Programm verwenden
kann. Dazu muß es nur das Definitionsmodul 'analyse.def' mit seinen
Daten (-typen) und Funktionen importieren.
-analyse.mod
In der Datei 'analyse.mod' befindet sich der Modula-2 Teil der Implemen-
tation von Analyse. Hier wird ein arithmetischer Ausdruck in eine Baum-
struktur umgewandelt und hier befindet sich auch die Schnittstelle zwi-
schen einem Anwendungsprogramm und dem Assemblerteil von Analyse.
-server.s
Diese Datei enthält den Quellcode des Assemblerteiles von Analyse. Der
Assemblerteil enthält im wesentlichen einen Compiler, der einen arith-
metischen Ausdruck in Maschinencode übersetzt. Darüberhinaus befinden
sich noch diverse andere Funktionen im Assemblerteil, die jedoch für die
Anwendung von Analyse nicht so wichtig sind.
-server
'server' ist der fertig assemblierte und ablaufbereite Assemblerteil von
Analyse. Der Modula-2 Teil von Analyse versucht nach Start des Anwen-
dungsprogramm den Assemblerteil nachzuladen. Der Anwender muß dafür
Sorge tragen, daß sich das Programm 'server' im Systemverzeichniss devs:
befindet. Achtung: 'server' ist ein ablaufbereites Programm. Es
erwartet jedoch eine besondere Aufrufumgebung, die ihm nur der Modula-2
Teil von Analyse bietet. Es ist sinnlos (und möglicherweise auch
absturtzgefährdet), 'server' von Hand mit dem CLI oder von der Workbench
aus zu starten!
4. Bedienung von Analyse
------------------------
4.1 Das Funktionsangebot von Analyse
------------------------------------
Wie man aus dem Definitionsmodul entnehmen kann, bietet Analyse folgende
Funktionen an:
-codeanf
Bekanntlich wird ein arithmetischer Ausdruck von Analyse in ein Maschi-
nenprogramm übersetzt. Das Anwendungsprogramm muß dazu jedoch erst ei-
nen geeigneten Speicherbereich zur Verfügung stellen. Dazu importiert
es aus dem Definitionsmodul von Analyse den Datentyp codezeiger. Beim
Aufruf der Funktion codeanf wird eine Variable dieses Types übergeben.
Dadurch wird ein genügend großer Speicherbereich vom System angefor-
dert. Dieser Speicher kann beliebig oft verwendet werden, um dort kom-
pilierte Ausdrücke abzulegen. Es empfiehlt sich folgendes Vorgehen: Zu
Programmbeginn wird für jede Codezeigervariable der nötige Speicher
angefordert. Am Programmende wird der Speicher für jede solche Variable
wieder freigegeben. Achtung: Wird der Speicher nicht angefordert, dann
endet das Anwendungsprogramm garantiert durch einen Systemabsturtz.
Wird der Speicher am Programmende nicht freigegeben, dann wird er auch
durch das Laufzeitsystem von M2Amiga nicht mehr freigegeben, da der
Speicher direkt über den Exec Kernal angefordert wird. Nach dem Funk-
tionsaufruf steht die Variable ok im Definitionsmodul auf TRUE, wenn
alles geklappt hat. War nicht genügend Speicher vorhanden, dann steht
ok auf FALSE. Übrigens setzen alle Funktionen die Variable ok im Feh-
lerfalle auf FALSE.
-codeloe
Diese Funktion ist das Gegenstück zu Codeanf und ist unter diesem Punkt
auch beschrieben. Die Anwendung von codeloe auf einen überhaupt nicht
angeforderten Speicherbereich resultiert in einem Systemabsturtz.
-parser
Jeder arithmetische Ausdruck, der in Textform vorliegt muß durch den
Aufruf von parser erst in eine andere Form gebracht werden, damit er
weiterverarbeitet werden kann ( Baumstruktur ). Für die Baumstruktur
benötigt man wieder einen speziellen Zeiger, dessen Typ man aus dem De-
finitionsmodul importieren kann. (knotenzeiger). Mit ok = FALSE signa-
lisiert die Prozedur, daß ein Fehler aufgetreten ist. Der genaue Fehler
kann der Variablen fehler entnommen werden. Wenn der Aufruf erfolgreich
verlaufen ist, dann kann das Anwendungsprogramm feststellen, von wel-
chen Variablen der Ausdruck abhängt. Die Abhängigkeit von der Variablen
x , y und z kann leicht über die logischen Variablen xabh, yabh und zabh
aus dem Definitionsmodul abgefragt werden. Für die indizierten Va-
riablen gibt es ein Feld aus logischen Variablen (abhfeld). Außerdem
gibt es die Variable maxvar, die einen Variablenindex angibt. Sie gibt
den höchsten Index an, von dem der Ausdruck noch abhängt. Beim Ausdruck
x7 - x3 * sin (x2) wird maxvar also auf 7 gesetzt werden. Hängt der
Ausdruck von keiner indizierten Variablen ab, so ist maxvar gleich -1.
Tritt ein Fehler auf, dann sollte man den entstandenen Baum sofort mit
'loesche' löschen.
-ableitung
Eine fertige Baumstruktur kann nach einer Variablen abgeleitet werden.
Man erhält dadurch neben der ursprünglichen Baumstruktur noch eine zwei-
te, die die Ableitung der ersten Struktur enthält. Analyse unterstützt
zwei Arten von Variablen: zum einen die drei Variablen x , y , z die
man bevorzugt verwenden sollte, weil der erzeugte Maschinencode
schneller auf sie zugreifen kann. Andererseits bietet Analyse auch
indizierte Variablen an: x0 , x1 , ... , x49 , x50. Beachten Sie, da
x sich von allen indizierten Variablen unterscheidet. Beim Ableiten mu
ein Parameter übergeben werden, der beschreibt, nach welcher Variablen
abgeleitet werden soll. Dieser Parameter hat den Typ CHAR und ist wie
folgt zu wählen: ableiten nach x: 253C ableiten nach y: 254C ableiten
nach z: 255C ableiten nach x0: 0C ableiten nach x1: 1C ... ableiten
nach x50: 50C Durch ok = FALSE wird wieder ein Fehler signalisiert.
Der entstandene Baum sollte aber nicht mehr benutzt, sondern vielmehr
gelöscht werden.
-infix
Durch den Aufruf der Prozedur infix kann man eine Baumstruktur in ein
lesbares Textformat umwandeln. Damit kann man z.B. eine erzeugte Ab-
leitung wieder in normaler Schreibweise ausgeben. Mit ok = FALSE wird
signalisiert, daß der Ausdruck in Textform nicht in den übergebenen
String passt. In diesem Falle fehlt das letzte Stück der Textdarstel-
lung.
-codegen
Die Funktion codegen benötigt einen Zeiger auf den zu kompilierenden
Baum und einen Zeiger auf einen Codespeicherbereich. Der übergebene
Baum wird in Maschinencode übersetzt. Dieser Maschinencode wird dann in
der übergebenen Codestruktur abgelegt. Wenn ok = FALSE ist, dann ist
der Ausdruck so komplex, daß er nicht in den Codespeicherbereich paßt.
Achtung: es wurde dann ein nicht vollständiges Maschinenprogramm er-
zeugt. Wenn es trotzdem aufgerufen wird, so kann der Rechner unter-
schiedlich gründlich abstürtzen!
-loesche
Wenn ein Baum nicht mehr benötigt wird (Codestruktur muß nicht mehr
erzeugt werden und es muß auch nicht mehr abgeleitet werden), dann
sollte man vor dem nächsten 'parser' Aufruf den Speicher für den Baum
mit 'loesche' freigeben, da dieser sonst für das System verloren ist.
Er würde übrigens auch nicht mehr vom M2Amiga Laufzeitsystem nach Pro-
grammende freigegeben werden, da auch hier der Speicher direkt über den
Exec Kernal angefordert wird.
-funktion
Diese Funktionsprozedur ruft den angegebenen Maschinencode auf und nimmt
dessen Ergebniss entgegen. Vorher sollten natürlich alle Variablen, von
denen der Ausdruck abhängt mit sinnvollen Werten belegt werden. Kommt
es zu einem mathematischen Fehler ( Division durch Null, Überlauf oder
Verletzung eines Definitionsbereiches ), so wird die Variable ok wieder
auf FALSE gesetzt. Der erhaltene Funktionswert ist in diesem Fall
irgend ein Schrott.
4.2 Das Datenangebot von Analyse
--------------------------------
folgende Variablen und Datentypen aus dem Definitionsmodul wurden noch
nicht kommentiert:
fehlertypen:
Nach einem gescheiterten Aufruf von 'parser' enthält die Variable fehler
einen Wert aus dem Aufzählungtyp fehlertypen. Diese haben folgende Be-
deutung:
-klammerauferwartet:
nach einem Funktionsnamen muß ein in Klammern eingeschlossenes Argument
kommen.
-klammerzuerwartet:
Der arithmetische Ausdruck endete überraschend, ohne daß alle geöffneten
Klammerebenen geschlossen wurden.
-quatsch:
Der Parser erwartete an dieser Stelle ein konkretes Symbol. Stattdessen
kam jedoch irgend ein Schrott.
-woistdastermende:
Laut Syntax muß kein weiteres Symbol mehr zwingend kommen. Der Ausdruck
könnte an dieser Stelle enden. Leider kommt jedoch irgend ein Schrott-
symbol.
-falscherindex:
Der Index der Variable ist größer als der maximale Index. (siehe
Konstante varanzahl im Defintionsmodul)
position:
Diese Variable gibt nach dem gescheiterten Aufruf von parser an, an
welcher Stelle des Strings ein Syntaxfehler festgestellt wurde.
5. schematische Darstellung von Analyse:
----------------------------------------
Zum Schluß noch einmal eine schematische Darstellung der Beziehungen
zwischen Analyse und einem Programm, das Analyse verwendet:
Das Anwenderprogramm Verwendet Analyse bedankt
stellt zur Verfügung: wird: sich dafür mit:
_________
| |
String ---> | | ---> Baumstruktur
| parser |
Baumzeiger ---> | | ---> Abhängigkeitsinformation
|_________|
\----> Fehler
_________
Baumzeiger ( Funktion ) ---> | |
| |
Baumzeiger ( Ableitung ) ---> |ableitung| ---> Baumstruktur
| |
Variable ( CHAR ) ---> |_________|
\----> ( Fehler )
_________
| |
Codezeiger ---> | |
| codegen | ---> Codestruktur
Baumzeiger ---> | |
|_________|
\----> Fehler
_________
| |
| |
Baumzeiger ---> | loesche |
| |
|_________|
_________
| |
| |
Codezeiger ---> | codeanf | ---> Codespeicher
| |
|_________|
_________
| |
Codezeiger ---> | |
|funktion | ---> Funktionswert
Variablen x , y , z ---> | |
+ indizierte Variablen |_________|
\----> Fehler
_________
| |
| |
Codezeiger ---> | codeloe |
| |
|_________|
_________
| |
Baumzeiger ---> | |
| infix | ---> String mit Funktion
String ---> | |
|_________|
\----> Fehler